package com.gjt.InternetAddress;

import java.io.IOException;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;

/**
 * Created with Intel IDEA.
 * NetworkInterface: 表示一个本地ip地址（网卡）
 * 静态工厂方法：
 *          getByName（String name）:返回一个NetworkInterface对象，表示有指定名字的网络接口
 *          getByInetAddress(InetAddress address): 返回一个NetworkInterface对象,表示与指定ip地址绑定的网络接口，
 *                                    如果本地主机上没有网络接口与这个ip绑定，就返回null
 *          getNetworkInterfaces():获取本地主机所有网络接口 返回一个枚举数组 java.util.Enumeration
 *  实例方法
 *          getInetAddresses（）: 一个网络接口可以绑定多个ip(存在不常见)  获取网络地址通过网络接口
 *          getName() :返回网络接口的名字
 *          getDisplayName(): 返回网络接口的更好看的名字
 *
 * @Auther: gjt
 * @Date: 2024/3/21 16:14
 */
public class Network {

    public static void main(String[] args) {
        try{
            // 通过名字获取网络接口
            NetworkInterface eth0 = NetworkInterface.getByName("eth0");
            // 一个网络接口可以绑定多个ip  获取网络地址通过网络接口
            Enumeration<InetAddress> inetAddresses = eth0.getInetAddresses();
            // 遍历枚举
            while(inetAddresses.hasMoreElements()){
                System.out.println(inetAddresses.nextElement());
            }
            System.out.println("网络接口对象的名："+eth0.getName());
            System.out.println("网络接口对象的更好看的名："+eth0.getDisplayName());


            InetAddress address = InetAddress.getByName("127.0.0.1");
            //  获取和此ip绑定的网络接口（网卡）
            NetworkInterface byInetAddress = NetworkInterface.getByInetAddress(address);


            // 获取本地主机上的所有网络接口（网卡）
            Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
            while(networkInterfaces.hasMoreElements()){
                NetworkInterface networkInterface = networkInterfaces.nextElement();
                System.out.println(networkInterface);
            }

        }catch (IOException e){
            e.printStackTrace();
        }
    }
}
